iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0
自我挑戰組

一個營建系學生的韌體之路-自走車篇系列 第 12

【AMR_Day12】ROS2 基本功-Topic

  • 分享至 

  • xImage
  •  

ROS2 系統概念圖


延續Day11系統概念圖,今天和明天來挑戰介紹完Topic、Service、Action這三個通訊界面。
我自己最熟悉的是Topic,所以盡可能的多提一些遇到的Topic問題,另外兩個界面很少用到就依照官方教學帶過~

Topic 話題

topic
各節點之間最基礎的通訊方式,像是廣播電台一樣,主持人(publisher)負責播送最新消息,如警廣會即時回報路況,觀眾(subscriber)就可以隨時收聽。
如上所說,一個話題會能有一到多個訂閱者(subscriber)、一到多個發布者(publisher)、話題名稱、話題種類、發送的內容。這些都是可以被查詢的,有分別對應的ROS2指令。

ros2 topic list

ros2 topic list    #列出目前的所有話題名稱

    /parameter_events
    /rosout
    /turtle1/cmd_vel
    /turtle1/color_sensor
    /turtle1/pose
ros2 topic list -t #列出目前的所有話題名稱與話題種類
    
    /parameter_events [rcl_interfaces/msg/ParameterEvent]
    /rosout [rcl_interfaces/msg/Log]
    /turtle1/cmd_vel [geometry_msgs/msg/Twist]
    /turtle1/color_sensor [turtlesim/msg/Color]
    /turtle1/pose [turtlesim/msg/Pose]

兩者的差別就是有沒有列出話題種類,話題種類是一個ROS2標準化的類型,有對應的訊息格式。
在自己撰寫節點時,這些資訊是非常重要的!

ros2 topic info

ros2 topic info <topic_name>  #列出此話題的種類,訂閱者與接收者數量

ros2 topic info /turtle1/cmd_vel
    Type: geometry_msgs/msg/Twist
    Publisher count: 1
    Subscription count: 2

ros2 interface show

ros2 interface show <topic_type>  #列出話題種類的格式(變數類別和變數名稱)

ros2 interface show geometry_msgs/msg/Twist
   
   # This expresses velocity in free space broken into its linear and angular parts.

    Vector3  linear
    Vector3  angular

ros2 topic echo

在terminal接收話題,直至指令被ctrl+c

ros2 topic echo <topic_name>

ros2 topic pub

ros2 topic pub <topic_name> <msg_type> '<args>' #發布一個話題 

ros2 topic pub --once /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}" #--once : 只發布一次

ros2 topic pub --rate 1 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}" #--rate 1 : 以1hz頻率發布

ros2 topic hz

ros2 topic hz <topic_name> #回傳此消息的發布頻率

我踩過得那些坑

namespace

有些Topic的名稱前面還會有命名空間(/turtle1),如果沒有對應到正確的命名空間會接收或發布不了話題,不過我自己還沒透徹的了解,後續我在慢慢補充在這。

rviz2

rviz2是一個ROS2提供的軟體,可以用來顯示3D視覺化的各種類話題。那我踩的這個坑和Qos有關,沒有設定好導致pointcloud2的資料一直沒有出現在rviz2中,害我以為是光達沒有設定好,浪費了很多時間調整,預計明天會仔細講講Qos。

後記

本來想要在今天一次把Topic、Service、Action講完,但礙於一些現實因素,還是把Service、Action留到明天,因為沒有實際用過,解釋起來可能有點短,所以會在加上一些Qos的部份,和相關的坑XD


上一篇
【AMR_Day11】ROS2 基本功- Node
下一篇
【AMR_Day13】ROS2 基本功- Service & Action & Qos
系列文
一個營建系學生的韌體之路-自走車篇30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言